/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PanelNoFarmacologico.java
 *
 * Created on 20-sep-2010, 9:44:39
 */

package presentacion.tratamiento_medicamentoso;

import com.toedter.calendar.IDateEditor;
import hibernate.objeto.NoFarmacologico;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Calendar;
import java.util.Date;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpinnerDateModel;
import logica.CapaLogica;
import logica.validacion.CapaValidacion;
import presentacion.comun.ComunNoFarmacologicoPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;

/**
 *
 * @author Administrador
 */
public class DatosNoFarmacologico extends javax.swing.JPanel {

    /** Creates new form DatosAntecedentesPersonal */
    /**
     * Constructor para carga.
     * 
     * @param referenciaJDialog 
     */
    public DatosNoFarmacologico(
            TratamientoMedicamentosoPresentacion referenciaJDialog) {
        initComponents();
        
        modoCarga();
        
        this.referenciaJDialog = referenciaJDialog;
        
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea la ventana en modo carga.
     * 
     */
    private void modoCarga() {
        horaSpinnerNoFarmacologico.getModel().setValue(new Date());
        fechaNoFarmacologico.setDate(new Date());
        botonVolver.setVisible(false);
        botonFinalizarNoFarmacologico.setVisible(false);
    }
    
    /**
     * Constructor para visualización.
     * 
     */
    public DatosNoFarmacologico(JDialog owner,
            NoFarmacologico noFarmacologico, JTable tabla, JTextField filtrar,
            Vector<NoFarmacologico> vector) {
        initComponents();
        botonQuitarNoFarmacologico.setVisible(false);
        if (noFarmacologico.getEstadoNoFarmacologico().equalsIgnoreCase(
                "No activo")) {
            botonFinalizarNoFarmacologico.setVisible(false);
        }

        this.owner = owner;
        this.noFarmacologico = noFarmacologico;
        this.tabla = tabla;
        this.filtrar = filtrar;
        this.vector = vector;
        
        exhibirDatosEnPantalla();
        botonVolver.requestFocus();
        setearEstadoCampos(false);
        
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    private void exhibirDatosEnPantalla() {
        //Hora
        setHoraNoFarmacologico(noFarmacologico.getHoraNoFarmacologico());

        //Fecha
        setFechaNoFarmacologico(noFarmacologico.getFechaNoFarmacologico());

        //Comentarios
        setDescripcionNoFarmacologico(
                noFarmacologico.getDescripcionNoFarmacologico());
    }

    /**
     * Setea el estado de los campos.
     * 
     * @param estado El estado a setear
     */
    private void setearEstadoCampos(boolean estado) {
        horaSpinnerNoFarmacologico.setEnabled(estado);
        fechaNoFarmacologico.setEnabled(estado);
        descripcionNoFarmacologico.setEnabled(estado);
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoHoraYNoFarmacologico = new javax.swing.JLabel();
        SpinnerDateModel spinerModel = new SpinnerDateModel(new Date(0, 0, 0, 0, 0, 0), null, null, Calendar.HOUR_OF_DAY);
        horaSpinnerNoFarmacologico = new javax.swing.JSpinner(spinerModel);
        fechaNoFarmacologico = new com.toedter.calendar.JDateChooser();
        textoDescripcionNoFarmacologico = new javax.swing.JLabel();
        descripcionNoFarmacologicoScrollPane = new javax.swing.JScrollPane();
        descripcionNoFarmacologico = new javax.swing.JTextArea();
        botonQuitarNoFarmacologico = new javax.swing.JButton();
        separadorFarmacologico = new javax.swing.JSeparator();
        botonVolver = new javax.swing.JButton();
        botonFinalizarNoFarmacologico = new javax.swing.JButton();

        setMaximumSize(new java.awt.Dimension(482, 354));
        setMinimumSize(new java.awt.Dimension(482, 354));
        setPreferredSize(new java.awt.Dimension(482, 354));

        textoHoraYNoFarmacologico.setFont(Fuente.FUENTE_LABEL);
        textoHoraYNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
        textoHoraYNoFarmacologico.setText("Hora y fecha");
        textoHoraYNoFarmacologico.setPreferredSize(new java.awt.Dimension(95, 20));

        JSpinner.DateEditor horaDeMuerte = new JSpinner.DateEditor(horaSpinnerNoFarmacologico, "HH:mm:ss");
        horaSpinnerNoFarmacologico.setEditor(horaDeMuerte);
        horaSpinnerNoFarmacologico.setFont(Fuente.FUENTE_TEXTFIELD);
        horaSpinnerNoFarmacologico.setPreferredSize(new java.awt.Dimension(90, 20));

        fechaNoFarmacologico.setToolTipText("");
        fechaNoFarmacologico.setMaxSelectableDate(new Date());
        fechaNoFarmacologico.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaNoFarmacologico.setPreferredSize(new java.awt.Dimension(90, 20));

        textoDescripcionNoFarmacologico.setFont(Fuente.FUENTE_LABEL);
        textoDescripcionNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
        textoDescripcionNoFarmacologico.setText("Descripción");
        textoDescripcionNoFarmacologico.setPreferredSize(new java.awt.Dimension(95, 20));

        descripcionNoFarmacologicoScrollPane.setPreferredSize(new java.awt.Dimension(166, 40));

        descripcionNoFarmacologico.setColumns(20);
        descripcionNoFarmacologico.setFont(Fuente.FUENTE_TEXTFIELD);
        descripcionNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
        descripcionNoFarmacologico.setLineWrap(true);
        descripcionNoFarmacologico.setRows(1);
        descripcionNoFarmacologico.setWrapStyleWord(true);
        descripcionNoFarmacologico.setPreferredSize(new java.awt.Dimension(162, 22));
        descripcionNoFarmacologicoScrollPane.setViewportView(descripcionNoFarmacologico);

        botonQuitarNoFarmacologico.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonQuitarNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
        botonQuitarNoFarmacologico.setIcon(Icono.ICONO_16_QUITAR);
        botonQuitarNoFarmacologico.setMnemonic('q');
        botonQuitarNoFarmacologico.setText("Quitar tratamiento");
        botonQuitarNoFarmacologico.setToolTipText("Remueve este conjunto de datos");
        botonQuitarNoFarmacologico.setPreferredSize(new java.awt.Dimension(150, 20));
        botonQuitarNoFarmacologico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonQuitarNoFarmacologicoActionPerformed(evt);
            }
        });

        separadorFarmacologico.setPreferredSize(new java.awt.Dimension(290, 2));

        botonVolver.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonVolver.setForeground(Fuente.COLOR_NORMAL);
        botonVolver.setIcon(Icono.ICONO_16_CANCELAR);
        botonVolver.setMnemonic('v');
        botonVolver.setText("Volver");
        botonVolver.setToolTipText("Vuelve a la ventana anterior");
        botonVolver.setPreferredSize(new java.awt.Dimension(150, 20));
        botonVolver.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVolverActionPerformed(evt);
            }
        });

        botonFinalizarNoFarmacologico.setFont(Fuente.FUENTE_BOTON_INTERNO);
        botonFinalizarNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
        botonFinalizarNoFarmacologico.setIcon(Icono.ICONO_16_ACEPTAR);
        botonFinalizarNoFarmacologico.setMnemonic('f');
        botonFinalizarNoFarmacologico.setText("Finalizar");
        botonFinalizarNoFarmacologico.setToolTipText("Finaliza el tratamiento");
        botonFinalizarNoFarmacologico.setPreferredSize(new java.awt.Dimension(150, 20));
        botonFinalizarNoFarmacologico.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonFinalizarNoFarmacologicoActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addComponent(textoDescripcionNoFarmacologico, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(textoHoraYNoFarmacologico, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(horaSpinnerNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(fechaNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(descripcionNoFarmacologicoScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(separadorFarmacologico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                            .addComponent(botonQuitarNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                            .addComponent(botonFinalizarNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(textoHoraYNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(horaSpinnerNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(fechaNoFarmacologico, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textoDescripcionNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(descripcionNoFarmacologicoScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 259, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(separadorFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonQuitarNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonFinalizarNoFarmacologico, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonVolver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(14, Short.MAX_VALUE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void botonQuitarNoFarmacologicoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonQuitarNoFarmacologicoActionPerformed
        JPanel panelPadre = (JPanel) botonQuitarNoFarmacologico.getParent().getParent();

        panelPadre.remove(botonQuitarNoFarmacologico.getParent());
        panelPadre.revalidate();
        panelPadre.repaint();
}//GEN-LAST:event_botonQuitarNoFarmacologicoActionPerformed

    private void botonVolverActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVolverActionPerformed
        cerrarGUI();
}//GEN-LAST:event_botonVolverActionPerformed

    private void botonFinalizarNoFarmacologicoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonFinalizarNoFarmacologicoActionPerformed
        new ComunNoFarmacologicoPresentacion(owner, noFarmacologico, tabla,
                filtrar, vector).finalizarNoFarmacologico();

        cerrarGUI();
}//GEN-LAST:event_botonFinalizarNoFarmacologicoActionPerformed

    /**
     * Cierra el JDialog que contiene al panel.
     * 
     */
    private void cerrarGUI() {
        JDialog jdialog = (JDialog)
                this.getParent().getParent().getParent().getParent();
        jdialog.dispose();
    }
    
    /**
     * Valida en conjunto todos los campos. Aquellos que son obligatorios y los
     * que no.
     *
     * @return true si el objeto está listo para cargarse, false en caso
     * contrario
     */
    public boolean validarCampos() {
        boolean fecha = validarCampoFecha();
        boolean descripcion = validarCampoDescripcion();

        return (fecha && descripcion);
    }

    /**
     * Valida los campos correspondiente al campo fecha.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoFecha() {
        JTabbedPane panelTabs  = ((JTabbedPane) this.getParent().getParent().
                getParent().getParent().getParent());
        boolean retorno;

        if (!CapaValidacion.validarFecha(
                fechaNoFarmacologico.getDate(), "", true)) {
            textoHoraYNoFarmacologico.setForeground(
                    Fuente.COLOR_ERROR);
            textoHoraYNoFarmacologico.setToolTipText(InformeError.
                    INFORME_ERROR_USO_COMUN_HORA_Y_FECHA);
            panelTabs.setForegroundAt(1, Fuente.COLOR_ERROR);
            retorno = false;
        } else {
            textoHoraYNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
            panelTabs.setForegroundAt(1, Fuente.COLOR_ERROR);
            textoHoraYNoFarmacologico.setToolTipText(null);
            retorno = true;
        }

        return retorno;
    }

    /**
     * Valida los campos correspondiente al campo descripción.
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCampoDescripcion() {
        JTabbedPane panelTabs  = ((JTabbedPane) this.getParent().getParent().
                getParent().getParent().getParent());
        boolean retorno;

        if (!CapaValidacion.validarCampoObligatorio(
                descripcionNoFarmacologico.getText())) {
            textoDescripcionNoFarmacologico.setForeground(
                    Fuente.COLOR_ERROR);
            panelTabs.setForegroundAt(1, Fuente.COLOR_ERROR);
            textoDescripcionNoFarmacologico.setToolTipText(InformeError.
                    INFORME_ERROR_DATOS_NO_FARMACOLOGICO_DESCRIPCION);
            retorno = false;
        } else {
            textoDescripcionNoFarmacologico.setForeground(Fuente.COLOR_NORMAL);
            panelTabs.setForegroundAt(1, Fuente.COLOR_NORMAL);
            textoDescripcionNoFarmacologico.setToolTipText(InformeError.
                    INFORME_ERROR_DATOS_NO_FARMACOLOGICO_DESCRIPCION);
            retorno = true;
        }

        return retorno;
    }

    public String getDescripcionNoFarmacologico() {
        return descripcionNoFarmacologico.getText();
    }

    public Date getFechaNoFarmacologico() {
        return fechaNoFarmacologico.getDate();
    }

    public String getHoraNoFarmacologico() {
        return CapaLogica.separarTiempo(
                horaSpinnerNoFarmacologico.getModel().getValue().toString());
    }

    public void setDescripcionNoFarmacologico(String descripcionNoFarmacologico) {
        this.descripcionNoFarmacologico.setText(descripcionNoFarmacologico);
        this.descripcionNoFarmacologico.setCaretPosition(0);
    }

    public void setFechaNoFarmacologico(Date fechaNoFarmacologico) {
        this.fechaNoFarmacologico.setDate(fechaNoFarmacologico);
    }

    public void setHoraNoFarmacologico(String horaNoFarmacologico) {
        this.horaSpinnerNoFarmacologico.getModel().setValue(new Date(0, 0, 0,
                CapaLogica.separarHoras(horaNoFarmacologico),
                CapaLogica.separarMinutos(horaNoFarmacologico),
                CapaLogica.separarSegundos(horaNoFarmacologico)));
    }

    public JButton getQuitarNoFarmacologico() {
        return botonQuitarNoFarmacologico;
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    if (referenciaJDialog != null) {
                        referenciaJDialog.dispose();
                    } else {
                        cerrarGUI();
                    }
                }
            }
        };
        //Setear eventos
        ((DefaultEditor) horaSpinnerNoFarmacologico.getEditor()).
                getTextField().addKeyListener(keyListenerEscape);
        
        ((IDateEditor) fechaNoFarmacologico.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        descripcionNoFarmacologico.addKeyListener(keyListenerEscape);
        botonQuitarNoFarmacologico.addKeyListener(keyListenerEscape);
        botonVolver.addKeyListener(keyListenerEscape);
        botonFinalizarNoFarmacologico.addKeyListener(keyListenerEscape);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonFinalizarNoFarmacologico;
    private javax.swing.JButton botonQuitarNoFarmacologico;
    private javax.swing.JButton botonVolver;
    private javax.swing.JTextArea descripcionNoFarmacologico;
    private javax.swing.JScrollPane descripcionNoFarmacologicoScrollPane;
    private com.toedter.calendar.JDateChooser fechaNoFarmacologico;
    private javax.swing.JSpinner horaSpinnerNoFarmacologico;
    private javax.swing.JSeparator separadorFarmacologico;
    private javax.swing.JLabel textoDescripcionNoFarmacologico;
    private javax.swing.JLabel textoHoraYNoFarmacologico;
    // End of variables declaration//GEN-END:variables
    private NoFarmacologico noFarmacologico;
    private JDialog owner;
    private JTable tabla;
    private JTextField filtrar;
    private Vector<NoFarmacologico> vector;
    private TratamientoMedicamentosoPresentacion referenciaJDialog;
}